class Student:  # 类名一个或多个单词组成，首字母大写
    native_place = "吉林"  # 直接写在类里的变量，称为类属性

    # init初始化方法
    def __init__(self, name, age):
        self.name = name  # self.name 称为实体属性， 进行了一个赋值的操作，将局部变量name的值赋给实体属性
        self.age = age

    # 实例方法
    def eat(self):
        print("学生在吃饭")

    # 静态方法
    @staticmethod
    def method():
        print("我使用了staticmethod进行修饰，所以我是静态方法")

    # 类方法
    @classmethod
    def cm(cls):
        print("我使用了classmate进行修饰，所以我是类方法")


# 类属性: 类中方法外的变量称为类属性，被该类的所有对象所共享
# 类方法: 使用@classmethod修饰的方法，使用类名直接访问的方法
# 静态方法：使用@staticmethod修饰的方法，使用类名直接访问的方法

# 类属性的使用方式

print(Student.native_place)  # 访问类属性
stu1 = Student("张三", 20)
stu2 = Student("王五", 87)
print(stu1.native_place)
print(stu2.native_place)

Student.native_place = "天津"
print(stu1.native_place)
print(stu2.native_place)

Student.cm()  # 调用类方法
Student.sm()  # 调用静态方法
